package com.briup.smartcity_group1.service;

import com.briup.smartcity_group1.exception.ServiceException;
import com.briup.smartcity_group1.bean.basic.BaseUser;
import com.briup.smartcity_group1.utils.JwtUtils;
import com.briup.smartcity_group1.utils.CheckUtils;

import java.util.Map;


/**
* 登录相关模块
*/
public interface ILoginService {

    /**用户登录接口,返回token字符串
     * <p>
     *     要求使用 {@link JwtUtils#sign(String, Map)} 来完成的生成。
     *     其中 Map 中必须包含 realname, username, role 三个信息
     * </p>
     * @param username 用户名
     * @param password 密码
     * @throws ServiceException 用户名不存在, 密码错误, 账号状态锁定...
     * @return  JWT token字符串
     */
    String login(String username,String password);

    /**用户登出
     * <p>
     *     如果用户在未登入或token失效的情况下登出，则提示用户已经登出
     * </p>
     * @throws ServiceException 用户在没有登录的情况下登出
     */
    void logout();

    /**用户注册
     * <p>
     *     必填项为 dob, email, gender, icon, password, realname, telephone, username
     *     若用户的邮箱、手机或者用户名已被使用， 密码强度不足， 或者出现不期望的值时，则提示用户更改。
     *     校验的相关方法统一写在 {@link CheckUtils} 中，返回 boolean。
     * </p>
     * @param baseUser  注册信息
     * @throws ServiceException 用户的邮箱、手机或者用户名已被使用 ，密码强度不足， 参数校验错误 或 必填项为空
     */
    void register(BaseUser baseUser);
}
